/*
自己选择的路 ,跪着也要走完。朋友们 , 虽然这个世界日益浮躁起来,只
要能够为了当时纯粹的梦想和感动坚持努力下去 , 不管其它人怎么样,我
们也能够保持自己的本色走下去。
To the world , you will be a person , but to a person , you
will be the world .                               ——AKPower
*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef int ll;
const ll maxn=200001;

struct node{
    ll y,val;
    ll next_s;
}e[maxn<<1];
ll head[maxn],cnt;
// struct node{
//     ll y,val;
//     node(ll y0,ll val0):y(y0),val(val0){}
// };

ll d[maxn],f[maxn],du[maxn];
// vector<node> p[maxn];
ll n;
bool vis[maxn];

void init(){
    memset(head,-1,sizeof(head));
    cnt=0;
}

void add(ll x,ll y,ll val){
    e[cnt].y=y;
    e[cnt].val=val;
    e[cnt].next_s=head[x];
    head[x]=cnt++;
}

void dp(ll u){
    vis[u]=true;
    // ll len=du[u];
    for(ll i=head[u];i!=-1;i=e[i].next_s){
        ll v=e[i].y;
        ll val=e[i].val;
        if(vis[v])continue;
        dp(v);
        if(du[v]==1)d[u]+=val;
        else d[u]+=min(d[v],val);
    }
    return ;
}

void dfs(ll u){
    vis[u]=true;
    // ll len=du[u];
    for(ll i=head[u];i!=-1;i=e[i].next_s){
        ll v=e[i].y;
        ll val=e[i].val;
        if(vis[v])continue;
        if(du[u]==1)f[v]=d[v]+val; //仅限于root为叶子时出现
        else f[v]=d[v]+min(f[u]-min(val,d[v]),val);
        dfs(v);
    }
    return ;
}

int main()
{
    IOS;
    ll t;
    cin>>t;
    while(t--){
        init();
        cin>>n;
        ll x,y,z;
        for(ll i=1;i<=n;i++){
            vis[i]=false;
            du[i]=0;
            d[i]=0;
            f[i]=0;
        }
        for(ll i=1;i<n;i++){
            cin>>x>>y>>z;
            du[x]++;du[y]++;
            add(x,y,z);
            add(y,x,z);
            // node t1(y,z);
            // p[x].push_back(t1);
            // node t2(x,z);
            // p[y].push_back(t2);
        }
        dp(1);
        for(ll i=1;i<=n;i++){
            vis[i]=false;
        }
        f[1]=d[1];
        dfs(1);
        ll ans=0;
        for(ll i=1;i<=n;i++){
            // cout<<"d[]"<<i<<" ="<<d[i]<<endl;
            // cout<<"f[]"<<i<<" ="<<f[i]<<endl;
            ans=max(ans,f[i]);
            // p[i].clear();
        }
        cout<<ans<<endl;
    }
    

    getchar();
    getchar();
    return 0;
}
